package i2.application.checklist.struts.actions;

import i2.application.checklist.entities.Categorie;
import i2.application.checklist.entities.LivrableChamp;
import i2.application.checklist.entities.Livraison;
import i2.application.checklist.services.CategorieService;

import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionSupport;


public class CategorieAction extends ActionSupport implements SessionAware  {

	private static final long serialVersionUID = 1L;
	private static final Logger logger = LoggerFactory.getLogger(CategorieAction.class);

	private CategorieService categorieService;

	private List<Categorie> enumCategorie;
	
	private Categorie categorie;

	private int id;

	private Livraison livraison;
	
	private int indexChamp;
	private Map<String, Object> session;
	
	public String list() {
		return "list";
	}
	
	public String consulter() {
		if (id == 0) {
			logger.error("aucun identifiant présent en paramètre");
			return ERROR;
		}
		logger.debug("consultation de l'application d'id : {}",id);
		
		try {
			categorie = enumCategorie.get(enumCategorie.indexOf(new Categorie(id)));
		} catch (IndexOutOfBoundsException e) {
			logger.error("{} n'est un identifiant de catégorie connu",id);
			return ERROR;
		}
		return "view";
	}

	public String creer() {
		session.put("creation",true);
		return INPUT;
	}
	
	public String editer() {
		session.remove("creation");
		logger.debug("suppression de l'application d'id : {}",categorie.getId());
		try {
			categorie = enumCategorie.get(enumCategorie.indexOf(categorie));
		} catch (IndexOutOfBoundsException e) {
			logger.error("{} n'est un identifiant connu",id);
			return ERROR;
		}
		
		return INPUT;
	}
	
	public String modifier() {
		categorieService.updateCategorie(categorie);
		return "list";
	}

	public String enregistrer() {
		for (LivrableChamp champ : categorie.getLivrableChamps()) {
			champ.setCategorie(categorie);
		}
		
		categorieService.createCategorie(categorie);
		return "list";
	}

	public String supprimer() {
		if (id == 0) {
			logger.error("aucun identifiant présent en paramètre");
			return ERROR;
		}
		
		logger.debug("suppression de l'application d'id : {}",id);
		try {
			categorie = enumCategorie.get(enumCategorie.indexOf(new Categorie(id)));
		} catch (IndexOutOfBoundsException e) {
			logger.error("{} n'est un identifiant connu",id);
			return ERROR;
		}
		categorieService.deleteCategorie(categorie);

		return "list";

	}
	
	public String ajouterChamp() {
		
		LivrableChamp champ = new LivrableChamp();
		champ.setCategorie(categorie);
		categorie.addChamp(champ);
		logger.debug("categorie : {}",categorie);
		return INPUT;
	}
	

	public String supprimerChamp() {
		categorie.deleteChamp(indexChamp);
		logger.debug("categorie : {}",categorie);
		return INPUT;
	}
	
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Categorie getCategorie() {
		return categorie;
	}

	public void setCategorie(Categorie categorie) {
		this.categorie = categorie;
	}

	public List<Categorie> getEnumCategorie() {
		return enumCategorie;
	}

	public void setEnumCategorie(List<Categorie> enumCategorie) {
		this.enumCategorie = enumCategorie;
	}
	
	public Livraison getLivraison() {
		return livraison;
	}

	public void setLivraison(Livraison livraison) {
		this.livraison = livraison;
	}

	public void setCategorieService(CategorieService categorieService) {
		this.categorieService = categorieService;
	}

	public boolean isCreation() {
		return session.containsKey("creation");
	}

	public void setIndexChamp(int indexChamp) {
		this.indexChamp = indexChamp;
	}

	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
	
}
